package com.gzy.literature.service.Impl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.gzy.literature.dao.UserWorksDao;
import com.gzy.literature.entity.UserWorks;
import com.gzy.literature.service.UserWorksService;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("userWorksService")
public class UserWorksServiceImpl implements UserWorksService {

    @Resource
    private UserWorksDao userWorksDao;

    /**
     * 通过userId和workId查询单条数据
     *
     * @param userId 用户ID
     * @param workId 作品ID
     * @return 实例对象
     */
    @Override
    public UserWorks queryByIdAndWorkId(Integer userId, Integer workId) {
        return userWorksDao.queryByIdAndWorkId(userId, workId);
    }

    /**
     * 分页查询（根据接口签名实现）
     *
     * @param userWorks 筛选条件
     * @param pageNum 页码，从1开始
     * @param pageSize 页面大小
     * @return 查询结果
     */
    @Override
    public PageInfo<UserWorks> queryFll(UserWorks userWorks, int pageNum, int pageSize) {
        PageRequest pageRequest = PageRequest.of(pageNum - 1, pageSize); // 注意页码通常从0开始，但这里从1开始所以需要减1

        // 如果使用 PageHelper 进行分页，需要添加以下两行代码（确保已引入 PageHelper 依赖）
        // PageHelper.startPage(pageRequest.getPageNumber(), pageRequest.getPageSize());

        List<UserWorks> userWorksList = userWorksDao.queryAllByCondition(userWorks);
        long total = userWorksDao.count(userWorks);

        Page<UserWorks> pageInfo = new Page<>();
        return pageInfo.toPageInfo();
    }

    /**
     * 新增数据
     *
     * @param userWorks 实例对象
     * @return 实例对象
     */
    @Override
    public UserWorks insert(UserWorks userWorks) {
        userWorksDao.insert(userWorks);
        // 假设 userWorks.userId 是数据库自增主键，插入后会自动赋值，这里直接返回
        return userWorks;
    }

    /**
     * 修改数据
     *
     * @param userWorks 实例对象
     * @return 影响行数
     */
    @Override
    public int update(UserWorks userWorks) {
        return userWorksDao.update(userWorks);
    }

    /**
     * 通过userId删除数据（可能删除多条，如果workId不是唯一的）
     *
     * @param userId 用户ID
     * @return 影响行数
     */
    @Override
    public int deleteByUserId(Integer userId) {
        return userWorksDao.deleteByUserId(userId);
    }

    /**
     * 通过userId和workId删除单条数据
     *
     * @param userId 用户ID
     * @param workId 作品ID
     * @return 影响行数
     */
    @Override
    public int deleteByIdAndWorkId(Integer userId, Integer workId) {
        return userWorksDao.deleteByIdAndWorkId(userId, workId);
    }
}
